<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>浏览器检测</title>
	</head>
	<body>
		<p>
			1浏览器及版本号<br />
			 不同浏览器支持的功能属性和方法各有不同，比如ie和firefox显示页面可能不同。
		</p>
		<br />
		<p >
			2浏览器嗅探器
			<br />
			浏览器嗅探器是一段程序有了它，浏览器检测就变得简单了。
		</p>
		
	<div id="title">
		
	</div>
    <p>
    	3检测插件<br />
    	
    	插件是一类特殊的程序，他可以扩展浏览器的功能，通过下载安装完成。
    	navigntor 对象的plugins属性，这是一个数组。存储浏览器已安装插件的完整列表。
    </p>
     <p>
     	4ActiveX
     	<br />
     	ie浏览器没有插件，但是提供了ActiveX控件。ActiveX控件是一种在web页面中嵌入对象或组件的方法。
     	由于在js 中，我们无法把所有已安装的ActiveX控件遍历出来，但是我们还是可以去验证是否安装了次控件
     	
     </p>
     <p>
     	5 MIME<br />
     	MIME 是指多用途因特网邮件扩展它是通过因特网发送消息的标准格式，现在也被用于在因特网中交换各种类型的文件。
     	ps:mimeTyoe[]数组在ie中不产生输出。
     </p>
	</body>
	
	<!--浏览器探测代码-->
	<script>
		var BrowserDetect = {
      init: function () {
        this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
        this.version = this.searchVersion(navigator.userAgent)
          || this.searchVersion(navigator.appVersion)
          || "an unknown version";
        this.OS = this.searchString(this.dataOS) || "an unknown OS";
      },
      searchString: function (data) {
        for (var i=0;i<data.length;i++) {
          var dataString = data[i].string;
          var dataProp = data[i].prop;
          this.versionSearchString = data[i].versionSearch || data[i].identity;
          if (dataString) {
            if (dataString.indexOf(data[i].subString) != -1)
              return data[i].identity;
          }
          else if (dataProp)
            return data[i].identity;
        }
      },
      searchVersion: function (dataString) {
        var index = dataString.indexOf(this.versionSearchString);
        if (index == -1) return;
        return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
      },
      dataBrowser: [
        {
          string: navigator.userAgent,
          subString: "Chrome",
          identity: "Chrome"
        },
        {    string: navigator.userAgent,
          subString: "OmniWeb",
          versionSearch: "OmniWeb/",
          identity: "OmniWeb"
        },
        {
          string: navigator.vendor,
          subString: "Apple",
          identity: "Safari",
          versionSearch: "Version"
        },
        {
          prop: window.opera,
          identity: "Opera"
        },
        {
          string: navigator.vendor,
          subString: "iCab",
          identity: "iCab"
        },
        {
          string: navigator.vendor,
          subString: "KDE",
          identity: "Konqueror"
        },
        {
          string: navigator.userAgent,
          subString: "Firefox",
          identity: "Firefox"
        },
        {
          string: navigator.vendor,
          subString: "Camino",
          identity: "Camino"
        },
        {       // for newer Netscapes (6+)
          string: navigator.userAgent,
          subString: "Netscape",
          identity: "Netscape"
        },
        {
          string: navigator.userAgent,
          subString: "MSIE",
          identity: "Internet Explorer",
          versionSearch: "MSIE"
        },
        {
          string: navigator.userAgent,
          subString: "Gecko",
          identity: "Mozilla",
          versionSearch: "rv"
        },
        {        // for older Netscapes (4-)
          string: navigator.userAgent,
          subString: "Mozilla",
          identity: "Netscape",
          versionSearch: "Mozilla"
        }
      ],
      dataOS : [
        {
          string: navigator.platform,
          subString: "Win",
          identity: "Windows"
        },
        {
          string: navigator.platform,
          subString: "Mac",
          identity: "Mac"
        },
        {
             string: navigator.userAgent,
             subString: "iPhone",
             identity: "iPhone/iPod"
        },
        {
          string: navigator.platform,
          subString: "Linux",
          identity: "Linux"
        }
      ]

    };
    BrowserDetect.init();

		
	</script>
	<script>
		//谷歌为例
		/*alert('浏览器完整的名称：'+navigator.appName);//浏览器名称：Netscape  。。无法精确取到浏览器名称
		alert('浏览器版本：'+navigator.appVersion);//浏览器版本：5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
		alert('浏览器用户代理字符串：'+navigator.userAgent);//浏览器用户代理字符串：Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
		alert('浏览器所在的系统：'+navigator.platform);//浏览器所在的系统：Win32*/
		
	
		//调用浏览器探测器并输出
	var title = document.getElementById('title');
    //window.navigator.userAgent
    title.innerHTML += '浏览器名称：'+BrowserDetect.browser;
    title.innerHTML += '  浏览器版本：'+BrowserDetect.version;
    title.innerHTML +='  浏览器系统'+ BrowserDetect.OS;
    
    //判断ie 
    if(BrowserDetect.browser='Internet Explorer'&&BrowserDetect.version<8){
    	alert('浏览器版本小于ie8')
    }
    
    //插件检测
    alert(navigator.plugins.length);//插件的数量
    for(var i =0;i<navigator.plugins.length;i++){
    	document.write('插件名：'+navigator.plugins[i].name+'</br>')
    	document.write('文件名：'+navigator.plugins[i].filename+'</br>');
    	document.write('描述：'+navigator.plugins[i].description+'</br>')
        document.write('</br>')
    }
    
    //3检测非IE浏览器插件是否存在
    function hasPlugin(name){
    	var name =name.toLowerCase();//转为小写
    	for (var i=0;i<navigator.plugins.length;i++) {
    		if(navigator.plugins[i].name.toLowerCase().indexOf(name)>-1){
    			return true;
    		}
    	}
    	return false;
    }
    
    alert(hasPlugin('Flash'));//检测是否有Flash插件
    alert(hasPlugin('java')); //检测java 是否存在
    
    
    //4检测ie中的控件
    function hasIEPlugin(name){
    	try{
    		new ActiveXObject(name);//这里的name 必须是控件的唯一标识符
    		return true;
    	}catch(e){
			return false;
    	}
    }
    //检测Flash
    alert(hasIEPlugin('ShockwaveFlash.ShockwaveFlash'));
    //ShockwaveFlash.ShockwaveFlash是ie中代表flash的标识符，你要检测控件必须先获取到标识符
	
	
	//判断所有浏览器检测插件
	function hasFlash(){
		//检测非ie
		var result = hasPlugin('Flash');//如果返回true，说明检测到了非ie浏览器并且不存在
		if(!result){
			//检测ie
			result = hasIEPlugin('ShockwaveFlash.ShockwaveFlash')//ie也不存在
		}
		return result;
	}
	alert(hasFlash());
	
	
	//5遍历非IE下所有MIME类型信息
	
	for(var i=0;i<navigator.mimeTypes.length;i++){
		if(navigator.mimeTypes[i].enabledPlugin!=null){//enabledPlugin指定MIMe类型配置好plugin对象引用
			document.write('<dl>');
			document.write('<dd>类型名称：'+navigator.mimeTypes[i].type+'</dd>');
			document.write('<dd>类型引用：'+navigator.mimeTypes[i].enabledPlugin.name+'</dd>');
			document.write('<dd>类型描述：'+navigator.mimeTypes[i].description+'</dd>');
			document.write('<dd>类型后缀：'+navigator.mimeTypes[i].suffixes+'</dd>');
			
			document.write('</dl>');
		}
	}
	</script>
	
	
	
</html>
